/**
 * @param {number[]} nums
 * @return {number}
 */
var missingNumber = function (nums) {
  let n = nums.length
  let flag = false
  let x = 0
  nums.push(n + 1)
  for (let i = 0; i < n; i++) {
    if (nums[i] == 0) x = i

  }
  for (let i = 0; i < n; i++) {
    if (Math.abs(nums[i]) == x) flag = true
    let num = Math.abs(nums[i])
    nums[num] = -Math.abs(nums[num])
  }
  if (!flag) return x
  for (let i = 0; i < n + 1; i++) {
    if (nums[i] > 0) {
      return i
    }
  }
}
/**
 * 哈希表
 * 问题：原地hash，主要是对0的处理，刚开始没把握好，如果有数字能映射到0上面
 * 判断的是大于等于0，那会把实际存在的这个数略过。
 * 如果直接判断大于0，那当没有数字能映射到0的位置时，又会把这个缺少的数略过。
 * 因此
 * 1、当有数能映射到0的位置的时候，判断大于0
 * 2、没有数能映射到0上，那缺少的数字就是0所在的索引
 */
// [9, 6, 4, 2, 3, 5, 7, 0, 1, 10]
// [-9, -6, -4, -2, -3, -5, -7, 0, -10]